//readonly修饰符，首先是一个关键字，类中的属性成员进行修饰，改属性成员不能在外部被随意的修改了
//构造函数中可以对只读的属性进行修改
//如果构造函数中没有任何的参数，类中的属性成员此时已经使用readonly进行了修饰，那么外部也不能对这个属性的值进行修改
//构造函数中的参数可以使用readonly修饰，一旦修饰了，那么该类中就有了这个只读的成员属性了，外部可以访问但是不能修改
//构造函数中的参数可以使用public、protected、private修饰，该类中都会添加这么一个属性成员
(()=>{
    //readonly修饰类中的成员属性
    // class Person{
    //     readonly name:string = '大甜甜' //初始值
    //     constructor(name:string){
    //         this.name = name
    //     }
    //     sayHi(){
    //         console.log('口你急哇',this.name)
    //          // person.name = '大甜甜'  //类中的普通方法也是无法修改被readonly修饰的成员属性
    //     }
    // }

    // const person = new Person('小甜甜')
    // console.log(person.name)
    // // person.name = '大甜甜'  //被readonly修饰后只读
    // console.log(person)
    // console.log(person.name)

    //readonly修饰类中的构造函数中的参数（参数属性）
    class Person{

        //构造函数中的name参数，一旦使用readonly进行修饰，那么该name参数可以叫做参数属性
        //构造函数中的name参数，一旦使用readonly进行修饰，那么该Person中就有了一个name的属性成员
        // constructor(readonly name:string){
        //     // this.name = name
        // }

        //构造函数中的name参数，一旦使用public进行修饰，那么该Person中就有了一个公共的name的属性成员
        // constructor(public name:string){
        //         // this.name = name
        // }

        //构造函数中的name参数，一旦使用private进行修饰，那么该Person中就有了一个私有的name的属性成员
        // constructor(private name:string){
        //         // this.name = name
        // }

        //构造函数中的name参数，一旦使用private进行修饰，那么该Person中就有了一个受保护的的name的属性成员
        constructor(protected name:string){
                // this.name = name
        }

        sayHi(){
            console.log('口你急哇',this.name)
             // person.name = '大甜甜'  //类中的普通方法也是无法修改被readonly修饰的成员属性
        }
    }

    // const person = new Person('小甜甜')
    // console.log(person)
    // person.name = '佐助'
    // console.log(person.name)
})()